// 所有函数去抖
let allDebounce = {
  time: null
}
let allThrottle = {
  isBusy: false
}
function install (Vue) {
  // debounce为去抖函数idle毫秒执行一次action（第一次也延迟idle毫秒执行）
  // action方法
  // idle延迟执行时间
  // name为字符串用来区别不同的debounce，单个可不传
  Vue.prototype.$debounce = (action, idle, name) => {
    if (name) {
      if (allDebounce[name]) {
        clearTimeout(allDebounce[name])
      }
      allDebounce[name] = setTimeout(() => {
        action()
      }, idle)
    } else {
      if (allDebounce.time) {
        clearTimeout(allDebounce.time)
      }
      allDebounce.time = setTimeout(() => {
        action()
      }, idle)
    }
  }
  // throttle为节流函数idle毫秒执行一次action，（第一次先执行）
  // action方法
  // idle执行的时间间隔
  // name为字符串用来区别不同的throttle，单个可不传
  Vue.prototype.$throttle = (action, idle, name) => {
    if (name) {
      if (!allThrottle[name]) {
        action()
        allThrottle[name] = true
        setTimeout(() => {
          allThrottle[name] = false
        }, idle)
      }
    } else {
      if (!allDebounce.isBusy) {
        action()
        allDebounce.isBusy = true
        setTimeout(() => {
          allThrottle.isBusy = false
        }, idle)
      }
    }
  }
  // 获取8位随机数字字母
  Vue.prototype.$guid = () => {
    return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1) + (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
  }
  // 时间戳文字格式化
  Vue.prototype.$conversionDate = (date) => {
    let time
    let reg = new RegExp('-', 'g')
    let createDtm = new Date(date.replace(reg, '/'))
    let nowDate = new Date()
    let day = 86400000
    let hours = 3600000
    let interval = nowDate - createDtm
    if (interval / day >= 7) {
      time = '一周前'
    } else {
      if (interval / day >= 1) {
        time = Math.floor(interval / day) + '天前'
      } else {
        time = Math.ceil(interval / hours) + '小时前'
      }
    }
    return time
  }
  //  正常时间戳格式化
  Vue.prototype.$dateFormat = (time) => {
    let datetime = new Date(time)
    let format = datetime.getFullYear() + '-' + (datetime.getMonth() + 1) + '-' + datetime.getDate() + ' '
    // X < 10 ? 0X : X
    format += (datetime.getHours() < 10) ? ('0' + datetime.getHours()) : datetime.getHours()
    format += ':'
    format += (datetime.getMinutes() < 10) ? ('0' + datetime.getMinutes()) : datetime.getMinutes()
    format += ':'
    format += (datetime.getSeconds() < 10) ? ('0' + datetime.getSeconds()) : datetime.getSeconds()
    return format
  }
}

export default install
